ホームに戻る
出典 :
WPFのTextBoxでIMEモードを設定する - プログラムを書こう!
関連 :
UIイベントの処理
目次 :

文字数、行数の制限

MaxLength で文字数を、MaxLines で行数を規定できる。
MaxLength == 0 は文字数無制限。

入力できる文字種の制限

IMEモードを設定する場合

設定するプロパティ
InputMethod.
IsInputMethodEnabled
InputMethod.
PreferredImeState
InputMethod.
PreferredImeConversionMode
IME無効 (半角英数) False - -
IME有効 全角ひらがな True (デフォルト) On FullShape,Native
全角カタカナ FullShape,Katakana
全角英数 FullShape,Alphanumeric
半角カタカナ Native,Katakana
半角英数 Alphanumeric
IMEが有効の場合、TextBox へのペーストが可能となる。ペーストを禁止したい場合はIMEを無効にすること。

書式を詳細に指定する場合 : イベントハンドラを使用

PreviewTextInput イベントハンドラを設定し、条件に合わない入力文字を読み捨てる。
/// - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - /// テキスト取得時 (Preview) /// - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - private void TextBox_PreviewTextInput( object sender, TextCompositionEventArgs e ) { // 所定の文字以外は読み捨てる // (イベントを処理済みとする) // ピリオド入力済 : 数字のみ // ピリオド未入力 : 数字とピリオド string pattern = (new Regex(@"\.")).IsMatch(((TextBox)sender).Text) ? @"[0-9]" : @"[0-9\.]"; e.Handled = !( ( new Regex( pattern ) ).IsMatch( e.Text ) ); }
ここでは、入力できる文字列を「数値」に制限している。
最後に入力された一文字 e.Text が「0 から 9 までの数字またはピリオド」に合致しない場合は、
イベント引数 TextCompositionEventArgs の Handled プロパティを true に設定することでイベントを処理済みとしている。
TextBox の Text は PreviewTextInput の段階では確定せず、続いて発生する TextInput を経なければ確定しない。
このため、PreviewTextInput でイベントを処理済みとし、後続の TextInput を発生させなくすることで、入力文字を「読み捨てる」ことができる。
イベント伝播の仕組みに関してはUIイベントの処理を参照のこと。